package model;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;

public class Salg {

    private int id;
    private final Calendar datoTid;
    private int totalBeløb;
    private boolean dankort;
    private boolean valutaDKK;
    private int rabat;
    private Ansat ansat;
    private Kasse kasse;
    private ArrayList<VareSalg> vareSalgsListe;
    private ArrayList<BilletSalg> billetSalgsListe;
    private ArrayList<EventSalg> eventSalgsListe;

    public Salg(int id, int totalBeløb, Calendar datoTid, boolean dankort, boolean valutaDKK, int rabat, Ansat ansat, Kasse kasse) {
        this.id = id;
        this.totalBeløb = totalBeløb;
        this.datoTid = datoTid;
        this.dankort = dankort;
        this.valutaDKK = valutaDKK;
        this.rabat = rabat;
        this.ansat = ansat;
        this.kasse = kasse;
        vareSalgsListe = new ArrayList<>();
        billetSalgsListe = new ArrayList<>();
        eventSalgsListe = new ArrayList<>();
    }

    public Salg(Calendar datoTid, Ansat ansat, Kasse kasse) {
        this.datoTid = datoTid;
        dankort = true;
        valutaDKK = true;
        this.ansat = ansat;
        this.kasse = kasse;

        vareSalgsListe = new ArrayList<>();
        billetSalgsListe = new ArrayList<>();
        eventSalgsListe = new ArrayList<>();
    }

    public Salg(int id, Calendar datoTid, int totalBeløb, boolean dankort, boolean valutaDKK) {
        this.id = id;
        this.datoTid = datoTid;
        this.totalBeløb = totalBeløb;
        this.dankort = dankort;
        this.valutaDKK = valutaDKK;
    }

    //<editor-fold defaultstate="collapsed" desc="Get-Metoder">
    public int getId() {
        return id;
    }
    /**
     * Hvis objektet ikke er hentet direkte fra databasen, refereres til 
     * beregnTotalBeløb() istedet. 
     * @return totalBeløb
     */
    public int getTotalBeløb() {
        return totalBeløb;
    }

    public Calendar getDatoTid() {
        return datoTid;
    }

    public boolean isDankort() {
        return dankort;
    }

    public boolean isValutaDKK() {
        return valutaDKK;
    }

    public int getRabat() {
        return rabat;
    }

    public Ansat getAnsat() {
        return ansat;
    }

    public Kasse getKasse() {
        return kasse;
    }

    public ArrayList<VareSalg> getVareSalgsListe() {
        return vareSalgsListe;
    }

    public ArrayList<BilletSalg> getBilletSalgsListe() {
        return billetSalgsListe;
    }

    public ArrayList<EventSalg> getEventSalgsListe() {
        return eventSalgsListe;
    }

    public int beregnTotalBeløb() {
        int result = 0;
        for (int i = 0; i < vareSalgsListe.size(); i++) {
            VareSalg vareSalg = vareSalgsListe.get(i);
            result = result + (vareSalg.getSalgsprisMedRabat());
        }
        for (int i = 0; i < billetSalgsListe.size(); i++) {
            BilletSalg billetSalg = billetSalgsListe.get(i);
            result = result + (billetSalg.getSalgsprisMedRabat());
        }
        for (int i = 0; i < eventSalgsListe.size(); i++) {
            EventSalg eventSalg = eventSalgsListe.get(i);
            result = result + (eventSalg.getSalgsprisMedRabat());
        }
        result = result - (result / 100 * rabat);
        totalBeløb = result;
        return result;
    }

//</editor-fold>
    public void setId(int id) {
        this.id = id;
    }

    public void setRabat(int rabat) {
        this.rabat = rabat;
    }

    public void setDankort(boolean dankort) {
        this.dankort = dankort;
    }

    public void setValutaDKK(boolean valutaDKK) {
        this.valutaDKK = valutaDKK;

        for (int i = 0; i < vareSalgsListe.size(); i++) {
            vareSalgsListe.get(i).setValutaDKK(valutaDKK);
        }
        for (int i = 0; i < eventSalgsListe.size(); i++) {
            eventSalgsListe.get(i).setValutaDKK(valutaDKK);
        }
        for (int i = 0; i < billetSalgsListe.size(); i++) {
            billetSalgsListe.get(i).setValutaDKK(valutaDKK);
        }

    }

    public void setTotalBeløb(int totalBeløb) {
        this.totalBeløb = totalBeløb;
    }

    public void setVareSalgsListe(ArrayList<VareSalg> vareSalgsListe) {
        this.vareSalgsListe = vareSalgsListe;
    }

    public void setBilletSalgsListe(ArrayList<BilletSalg> billetSalgsListe) {
        this.billetSalgsListe = billetSalgsListe;
    }

    public void setEventSalgsListe(ArrayList<EventSalg> eventSalgsListe) {
        this.eventSalgsListe = eventSalgsListe;
    }

    public String toDatoString() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy - HH:mm:ss");
        return sdf.format(datoTid.getTime());
    }

    public int getVareSalgsListeTotalpris() {
        int vareSalgsTotalpris = 0;
        for (int i = 0; i < vareSalgsListe.size(); i++) {
            vareSalgsTotalpris = vareSalgsTotalpris + vareSalgsListe.get(i).getSalgsprisMedRabat();
        }
        return vareSalgsTotalpris;
    }

    public int getBilletSalgsListeTotalpris() {
        int billetSalgsTotalPris = 0;
        for (int i = 0; i < billetSalgsListe.size(); i++) {
            billetSalgsTotalPris = billetSalgsTotalPris + billetSalgsListe.get(i).getSalgsprisMedRabat();
        }
        return billetSalgsTotalPris;
    }

    public int getEventSalgsListeTotalpris() {
        int eventSalgsTotalPris = 0;
        for (int i = 0; i < eventSalgsListe.size(); i++) {
            eventSalgsTotalPris = eventSalgsTotalPris + eventSalgsListe.get(i).getSalgsprisMedRabat();
        }
        return eventSalgsTotalPris;
    }
}
